package com.easyedu.dean.entity.dto.request;

import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * @author mfy
 */
@Data
public class ReqCultivationScheme {
    /**
     * 功能描述:培养方案名称
     */
    @NotNull(message = "培养方案名称不能为空")
    private String cultivationName;

    /**
     * 功能描述:培养方案所属学院id
     */
    @NotNull(message = "培养方案所属学院id不能为空")
    private long belongInstituteId;

    /**
     * 功能描述:培养方案所属学院名称
     */
    @NotNull(message = "培养方案所属学院名称不能为空")
    private String belongInstituteName;

    /**
     * 功能描述:培养方案所属专业id
     */
    @Min(value = 1, message = "培养方案所属专业id不能为空")
    private long belongDepartmentId;

    /**
     * 功能描述:培养方案所属专业名称
     */
    @NotNull(message = "培养方案所属专业名称不能为空")
    private String belongDepartmentName;

    /**
     * 功能描述:年级
     */
    @NotNull(message = "年级不能为空")
    private String grade;

    @Valid
    private List<Course> courses;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Course {
        /**
         * 功能描述:课程id
         */
        @Min(value = 1, message = "课程id不能为空")
        private long courseId;

        /**
         * 功能描述:学年
         */
        @NotNull(message = "学年不能为空")
        private String schoolYear;

        /**
         * 功能描述:学期
         */
        @NotNull(message = "学期不能为空")
        private String semester;

        /**
         * 理论学时
         */
        @Min(value = 0,message = "理论学时不能为空")
        private long theoryClassHour;
        /**
         * 实践学时
         */
        private long experimentClassHour;
        /**
         * 总学时
         */
        @Min(value = 0,message = "总学时不能为空")
        private long totalClassHour;
        /**
         * 平时成绩占比
         */
        private double usualScoreRatio;
        /**
         * 实践成绩占比
         */
        private double experimentScoreRatio;
        /**
         * 考试成绩占比
         */
        private double examScoreRatio;

        /**
         * 功能描述:备注
         */
        @Size(min = 0, max = 200, message = "备注应该在在0-200字符之间")
        private String note;

    }
}
